O(NM^2)